When a test fails, developers need to find the location of the fault in the source code before they can fix the problem. In recent years, a number of automated techniques have been proposed to assist programmers with this task, which is usually called fault localization. Many fault-localization techniques attempt to predict the location of a fault by applying statistical analyses to data obtained from the execution of multiple tests (see, for example, [19, 20, 21, 18, 3, 27]). The basic idea is that a statement [19], control-flow predicate [20], or def-use pair [27] is more suspicious (or more likely to be responsible for a test failure) if it correlates strongly with failing tests, and less suspicious if it correlates strongly with passing tests.